package com.zhf.client;

import com.zhf.model.User;
import com.zhf.model.UserMessage;
import com.zhf.model.UserMessageWithAuth;

import java.io.IOException;

/**
 * 编程实现客户端的主界面绘制和相应功能的实现
 */
public class ClientView {
    /**
     * 为了可以使用输入输出流，采用合成复用原则实现
     */
    private ClientInitClose cic;

    /**
     * 通过构造方法实现成员变量的初始化
     * @param cic
     */
    public ClientView(ClientInitClose cic) {
        this.cic = cic;
    }

    /**
     * 自定义成员方法实现客户端主界面的绘制
     */
    public void clientMainPage() throws IOException, ClassNotFoundException, InterruptedException {
        while(true) {
            System.out.println("  \n\n\t\t   在线考试系统");
            System.out.println("-------------------------------------------");
            System.out.print("   [1] 学员系统");
            System.out.println("     [2] 管理员系统");
            System.out.println("   [0] 退出系统");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    UserMessageWithAuth userMessageWithAuth = clientUserLogin();
                    if(userMessageWithAuth.isAuth()){
                        System.out.println("正在进入学员系统...");
                        ClientUserVIew cuv = new ClientUserVIew(cic, userMessageWithAuth.getUserMessage().getUser());
                        cuv.userMainOperate();
                        cic = new ClientInitClose();
                        // 2. 调用成员方法实现客户端的初始化操作
                        cic.clientInit();
                    }
                    break;
                case 2:
                    boolean isAuth1 = clientManagerLogin();
                    if(isAuth1){
                        System.out.println("正在进入管理员系统...");
                        ClientManagerView cmv = new ClientManagerView(cic);
                        cmv.managerMainOperate();
                        cic = new ClientInitClose();
                        // 2. 调用成员方法实现客户端的初始化操作
                        cic.clientInit();
                    }
                    break;
                case 0:
                    cic.getOos().writeObject(new UserMessage("exit", null));
                    System.out.println("正在退出系统...");
                    cic.clientClose();
                    System.exit(0);
                    return;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
     * 自定义成员方法实现客户端管理员登录的功能
     */
    private boolean clientManagerLogin() throws IOException, ClassNotFoundException {
        boolean isAuth = false;
        // 1.准备管理员登录的相关数据
        System.out.println("请输入管理员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入管理员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("managerCheck", new User(userName, password));
        // 2.将UserMessage类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送管理员账户信息成功！");
        // 3.接收服务器的处理结果并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("登录成功，欢迎使用！");
            isAuth = true;
        } else {
            System.out.println("用户名或密码错误！");
        }
        return isAuth;
    }

    /**
     * 自定义成员方法实现客户端普通成员登录的功能
     */
    private UserMessageWithAuth clientUserLogin() throws IOException, ClassNotFoundException {

        boolean isAuth = false;
        // 1.准备管理员登录的相关数据
        System.out.println("请输入学员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("userCheck", new User(userName, password));
        // 2.将UserMessage类型的对象通过对象输出流发送给服务器
        cic.getOos().writeObject(tum);
        System.out.println("客户端发送学员账户信息成功！");
        // 3.接收服务器的处理结果并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if ("success".equals(tum.getType())) {
            System.out.println("登录成功，欢迎使用！");
            isAuth = true;
        } else {
            System.out.println("用户名或密码错误！");
        }
        return new UserMessageWithAuth(isAuth, tum);
    }

}
